/**
 * Copyright 2006 gworks.com.au
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License. (http://www.apache.org/licenses/LICENSE-2.0)
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed 
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for 
 * the specific language governing permissions and limitations under the License.
 *
 * <dhamma-message src="Atisha (11th century Tibetan Buddhist master)">
 * 	The greatest achievement is selflessness. The greatest worth is self-mastery.
 * 	The greatest quality is seeking to serve others. The greatest precept is continual awareness.
 * 	The greatest medicine is the emptiness of everything. The greatest action is not conforming with the worlds ways.
 * 	The greatest magic is transmuting the passions. The greatest generosity is non-attachment.
 * 	The greatest goodness is a peaceful mind. The greatest patience is humility.
 * 	The greatest effort is not concerned with results. The greatest meditation is a mind that lets go.
 * 	The greatest wisdom is seeing through appearances. 
 * </dhamma-message>
 */
/* Licence:
*   Use this however/wherever you like, just don't blame me if it breaks anything.
*
* Credit:
*   If you're nice, you'll leave this bit:
*
*   Class by Pierre-Alexandre Losson -- http://www.telio.be/blog
*   email : plosson@users.sourceforge.net
*/
package org.javaongems.runtime.fileupload;

import java.io.File;
import java.io.IOException;
import java.io.OutputStream;

import org.apache.commons.fileupload.disk.DiskFileItem;

/**
 * <p>Provides a monitorable file item extension to the commons fileupload
 * facilities.</p>
 * <p>Responsiblities:
 * <ul>
 * 	<li> wraps an output stream with monitoring support
 * </ul>
 * </p>
 * 
 * @author Pierre-Alexandre Losson, some hacks by Ashin Wimalajeewa (ash)
 */
public class MonitoredDiskFileItem extends DiskFileItem {
	private static final long serialVersionUID = 1L;

	private MonitoredOutputStream mos = null;
	private MonitoredOutputStreamListener listener;

	public MonitoredDiskFileItem(String fieldName, String contentType,
			boolean isFormField, String fileName, int sizeThreshold,
			File repository, MonitoredOutputStreamListener lsnr) {
		super(fieldName, contentType, isFormField, fileName, sizeThreshold,
				repository);
		listener = lsnr;
	}

	public OutputStream getOutputStream() throws IOException {
		if (mos == null) 
			mos = new MonitoredOutputStream(this, super.getOutputStream(), listener);
		return mos;
	}
}
